// 导入 Passport 的本地策略模块，用于处理本地认证
import { Strategy } from 'passport-local';
// 导入 Nest 的 Passport 策略构建器，以集成 Passport 策略
import { PassportStrategy } from '@nestjs/passport';
// 导入 Nest 的 Injectable 和 UnauthorizedException 装饰器，用于创建服务和处理未授权异常
import { Injectable, UnauthorizedException } from '@nestjs/common';
// 导入自定义的 AuthService 服务，用于验证用户
import { AuthService } from './auth.service';

// 使用 @Injectable 装饰器标记该类为 Nest 的注入服务
@Injectable()
// LocalStrategy 继承自 PassportStrategy，用于实现本地认证策略
export class LocalStrategy extends PassportStrategy(Strategy) {
  // 构造函数接收 AuthService 作为参数，用于验证用户
  constructor(private authService: AuthService) {
    super({ usernameField: 'username' });
  }

  // validate 方法是本地策略的核心，用于验证用户名和密码
  async validate(username: string, password: string): Promise<any> {
    console.log("validate被调用：", username, password);

    
    // 调用 AuthService 的 validateUser 方法验证用户
    const user = await this.authService.validateUser(username, password);
    // 如果验证失败，抛出未授权异常
    if (!user) {
      throw new UnauthorizedException();
    }
    // 如果验证成功，返回用户信息
    return user;
  }
}